Java তে multithreading বা একাধিক থ্রেড ব্যবহারের মাধ্যমে একাধিক কাজ একসাথে সম্পন্ন করা যায়। Thread ক্লাস এবং Runnable ইন্টারফেস দুটি মূল উপাদান যা থ্রেড তৈরি এবং পরিচালনার জন্য ব্যবহৃত হয়। এই দুটি ক্লাস/ইন্টারফেস Java-এ মাল্টিথ্রেডিং সিস্টেম তৈরি করতে গুরুত্বপূর্ণ ভূমিকা পালন করে।
1. Thread ক্লাস
Thread ক্লাস Java তে মাল্টিথ্রেডিং পরিচালনা করার জন্য একটি প্রধান ক্লাস। এই ক্লাসের মাধ্যমে আপনি থ্রেড তৈরি এবং চালনা করতে পারেন। Thread ক্লাস সরাসরি java.lang প্যাকেজে অন্তর্ভুক্ত রয়েছে এবং এটি থ্রেডের সাথে সম্পর্কিত অনেক মেথড সরবরাহ করে।
Thread ক্লাসের ভূমিকা:
- Thread creation:
Threadক্লাস ব্যবহার করে আপনি থ্রেড তৈরি করতে পারেন এবং সেই থ্রেডের কার্যকারিতা পরিচালনা করতে পারেন। - Thread execution:
Threadক্লাসrun()মেথড ব্যবহার করে থ্রেডের কাজ নির্ধারণ করতে সাহায্য করে। - Thread states management:
Threadক্লাস থ্রেডের স্টেট ম্যানেজমেন্ট (যেমন,start(),sleep(),join(),interrupt()) পরিচালনা করতে সাহায্য করে।
Thread ক্লাসের উদাহরণ:
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread is running");
}
}
public class ThreadExample {
public static void main(String[] args) {
MyThread thread = new MyThread(); // Create a new thread
thread.start(); // Start the thread
}
}
- এখানে,
MyThreadক্লাসThreadক্লাস থেকে ইনহেরিটেড এবংrun()মেথড ওভাররাইড করা হয়েছে। start()মেথড কল করার মাধ্যমে থ্রেডটি শুরু হয় এবংrun()মেথডটি কল হয়।
2. Runnable ইন্টারফেস
Runnable ইন্টারফেস Java তে মাল্টিথ্রেডিং করার জন্য একটি ফাংশনাল ইন্টারফেস। এটি সাধারণত ব্যবহার করা হয় যখন আপনি থ্রেড তৈরি করতে চান তবে Thread ক্লাসের বাইরেও কাজ করতে চান। আপনি একটি ক্লাসে Runnable ইন্টারফেস ইমপ্লিমেন্ট করে এবং তারপরে থ্রেড চালু করতে পারেন।
Runnable ইন্টারফেসের ভূমিকা:
- Thread execution:
Runnableইন্টারফেসেরrun()মেথডটি থ্রেডের কাজ নির্ধারণ করে। - Thread creation: এটি
Threadক্লাসের মধ্যেRunnableঅবজেক্টকে পাস করে থ্রেড তৈরি করার সুযোগ দেয়। - Flexibility:
Runnableইন্টারফেস ব্যবহার করলে একটি ক্লাস একাধিক ক্লাসের সাথে ইনহেরিট করতে পারে, যাThreadক্লাসের ক্ষেত্রে সম্ভব নয় (কেননাThreadক্লাস নিজেই একটি ক্লাস এবং একাধিক ক্লাস ইনহেরিট করা সম্ভব নয়)।
Runnable ইন্টারফেসের উদাহরণ:
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable is running");
}
}
public class RunnableExample {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable(); // Create a new Runnable object
Thread thread = new Thread(myRunnable); // Create a new Thread and pass Runnable object
thread.start(); // Start the thread
}
}
- এখানে,
MyRunnableক্লাসRunnableইন্টারফেস ইমপ্লিমেন্ট করে এবংrun()মেথডের মধ্যে থ্রেডের কাজ প্রদান করা হয়েছে। Threadক্লাসের কন্সট্রাক্টরকেRunnableঅবজেক্ট পাস করে থ্রেড তৈরি করা হয় এবং তারপরstart()মেথড কল করা হয়।
Thread এবং Runnable এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Thread ক্লাস | Runnable ইন্টারফেস |
|---|---|---|
| Inheritance | Thread ক্লাস একটি কনক্রিট ক্লাস, সুতরাং এটি শুধুমাত্র একটি ক্লাস থেকেই ইনহেরিট করা যেতে পারে। | Runnable একটি ইন্টারফেস, যেটি একাধিক ক্লাসে ইমপ্লিমেন্ট করা যেতে পারে। |
| Thread Creation | Thread ক্লাস ইনস্ট্যান্স তৈরি এবং run() মেথড ওভাররাইড করে থ্রেড তৈরি করা যায়। | Runnable ইন্টারফেস ইমপ্লিমেন্ট করে run() মেথড তৈরি করতে হয় এবং Thread অবজেক্টে পাস করে থ্রেড তৈরি করা যায়। |
| Flexibility | থ্রেড তৈরি করতে Thread ক্লাসের বাইরের কোনো ক্লাসের সাথে একসাথে কাজ করা যায় না। | একাধিক ইন্টারফেস বা সুপারক্লাস থেকে ইনহেরিট করা যেতে পারে, তাই এটি বেশি নমনীয়। |
| Performance | Thread ক্লাসটি একটু কম নমনীয়, কারণ এটি একটি ক্লাস এবং একাধিক ক্লাস ইনহেরিট করা সম্ভব নয়। | Runnable বেশি পারফরম্যান্সফুল, কারণ এটি একাধিক ক্লাস ইনহেরিট বা ইমপ্লিমেন্ট করা যেতে পারে। |
| Thread Control | Thread ক্লাসে থ্রেড নিয়ন্ত্রণের জন্য কিছু built-in মেথড থাকে, যেমন sleep(), join(), interrupt()। | Runnable ইন্টারফেসে শুধুমাত্র run() মেথড থাকে; থ্রেড নিয়ন্ত্রণের জন্য Thread ক্লাসের মেথড ব্যবহার করতে হয়। |
Thread এবং Runnable ব্যবহার করা:
- Thread Class ব্যবহৃত হয় যখন আপনি সরাসরি থ্রেড তৈরি এবং পরিচালনা করতে চান।
- Runnable Interface ব্যবহৃত হয় যখন আপনি থ্রেড কাজের জন্য কোডটি পুনঃব্যবহারযোগ্য এবং বেশি নমনীয় রাখতে চান, এবং যখন আপনি একাধিক ক্লাস থেকে থ্রেডের কার্যকলাপ করতে চান।
Thread Class ব্যবহার:
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread is running");
}
}
public class ThreadExample {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
Runnable Interface ব্যবহার:
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable is running");
}
}
public class RunnableExample {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
- Thread ক্লাস এবং Runnable ইন্টারফেস উভয়ই থ্রেড তৈরি এবং পরিচালনা করতে ব্যবহৃত হয়, তবে তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে।
- Thread ক্লাস এককভাবে একটি থ্রেড তৈরি করতে ব্যবহার করা হয়, তবে Runnable ইন্টারফেস আরও নমনীয় এবং একাধিক ক্লাসের সাথে ব্যবহার করা যায়। Runnable ইন্টারফেস ব্যবহার করে আপনি একাধিক ফিচার ইমপ্লিমেন্ট করতে পারেন, এবং এটি performance দিক থেকেও কিছুটা বেশি সুবিধাজনক।
Read more